/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utilidades;

import java.sql.Date;

/**
 * Herramientas para parsear datos y construir querys
 *
 * @author felipe
 */
public class ConstructorQuery {

    private Date fecha;
    private Float apertura;
    private Float maximo;
    private Float minimo;
    private Float cierre;
    private Float volumen;
    private Float ajusteCierre;
    private String id;
    private String fechaInicioConsulta;
    private String fechaFinalConsulta;

    /**
     * Dada un linea sin parsear, devuelve un query para ejecutar.
     *
     * @param linea
     * @return
     */
    public String constructorQueryInsert(String linea, String id) {
        obtenerDatosParaInsert(parseadorFichero(linea));
        String query = "INSERT INTO FINANCES VALUES('"
                + id + "', '" + fecha + "', " + apertura + ", "
                + maximo + ", " + minimo + ", " + cierre + ", "
                + volumen + ", " + ajusteCierre + ")";
        return query;
    }

    /**
     * Dados unos datos, se contruye una query y se devueve
     */
    public String constructorQuerySelectCierre(String linea) {
        obtenerDatosParaSelect(parseadorFichero(linea));
        String query = "SELECT CIERRE FROM FINANCES WHERE "
                + "VALOR = '" + id + "' AND "
                + "FECHA BETWEEN '" + fechaInicioConsulta + "' "
                + "AND '" + fechaFinalConsulta + "' "
                + "ORDER BY FECHA DESC";
        return query;
    }
    
    /**
     * Dados unos datos, se contruye una query y se devueve
     */
    public String constructorQuerySelectFecha(String linea) {
        obtenerDatosParaSelect(parseadorFichero(linea));
        String query = "SELECT FECHA FROM FINANCES WHERE "
                + "VALOR = '" + id + "' AND "
                + "FECHA BETWEEN '" + fechaInicioConsulta + "' "
                + "AND '" + fechaFinalConsulta + "' "
                + "ORDER BY FECHA DESC";
        return query;
    }

    /**
     * Dado un String con comas, obtiene las palabras entre comas y las
     * introduce en un array de String.
     *
     * @param fila
     * @return
     */
    private String[] parseadorFichero(String fila) {
        String[] lineaParseada;
        String delimiter = ",";
        lineaParseada = fila.split(delimiter);
        return lineaParseada;
    }

    /**
     * Dado un array de String, obtiene en orden la información de cada celda
     * para utilizarla.
     *
     * @param lineaParseada
     */
    private void obtenerDatosParaInsert(String[] lineaParseada) {
        fecha = Date.valueOf(lineaParseada[0]);
        apertura = new Float(lineaParseada[1]);
        maximo = new Float(lineaParseada[2]);
        minimo = new Float(lineaParseada[3]);
        cierre = new Float(lineaParseada[4]);
        volumen = new Float(lineaParseada[5]);
        ajusteCierre = new Float(lineaParseada[6]);
    }

    /**
     * Dado un array de String, obtiene en orden la información de cada celda
     * para utilizarla.
     *
     * @param lineaParseada
     */
    private void obtenerDatosParaSelect(String[] lineaParseada) {
        id = lineaParseada[0];
        insertarFecha(lineaParseada[1], lineaParseada[2]);
    }

    /**
     * Parsea dos fechas, las compara y las inserta segun su antiguedad.
     *
     * @param fecha1
     * @param fecha2
     */
    private void insertarFecha(String fecha1, String fecha2) {
        Date f1 = Date.valueOf(parseadorFecha(fecha1));
        Date f2 = Date.valueOf(parseadorFecha(fecha2));
        if (f1.before(f2)) {
            fechaInicioConsulta = f1.toString();
            fechaFinalConsulta = f2.toString();
        } else {
            fechaInicioConsulta = f2.toString();
            fechaFinalConsulta = f1.toString();
        }
    }

    /**
     * Dado un path absoluto, devuelve el nombre de un fichero sin extension.
     *
     * @param pathFichero
     * @return
     */
    public String parseadorPath(String pathFichero) {
        String[] lineaParseada;
        String delimiter = "/";
        lineaParseada = pathFichero.split(delimiter);
        String fichero = lineaParseada[lineaParseada.length - 1];
        fichero = fichero.replace(".csv", "");
        return fichero;
    }

    /**
     * Dado un String YYYYMMDD, devuelve un String YYYY-MM-DD.
     *
     * @param fecha
     * @return
     */
    private String parseadorFecha(String fecha) {
        String año = fecha.substring(0, 4);
        String mes = fecha.substring(4, 6);
        String dia = fecha.substring(6);
        return año + "-" + mes + "-" + dia;
    }
}